# 赋值
l1 = [1,2,3,4]
print(l1)
l2 = l1
l2.append(5)
print(l1) #[1, 2, 3, 4, 5]
print(id(l1),id(l2)) #2498750360832 2498750360832


# 浅拷贝 -> 会创建新的对象,拷贝第一层的对象,但是嵌套层会指向原来的内存地址
import copy

l1 = [1,2,3,4,[5,6,7,8]]
l2 = copy.copy(l1)
print(id(l1),id(l2)) #1600451006656 1600453221952
print(id(l1[4]),id(l2[4])) # 2458134437568 2458134437568

# 优点 -> 拷贝速度快,占用空间小,数据半共享

# 深拷贝
l1 = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy(l1)
print(id(l1),id(l2)) #2096236514368 2096203583680
print(id(l1[5]),id(l2[5])) # 1472513158400 1472516532992



# 可变对象 -> 变量对应的值可以修改,但是内存地址不会发生改变,如列表
# 不可变对象 -> 变量对应的值不可以修改,如数值,字符串,元组
